package cn.link.imageloader; import android.content.Context; import android.graphics.ColorMatrixColorFilter; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ImageButton; import cn.link.imageloader.display.OnLoadingListener; import cn.link.imageloader.display.BitmapProgressListener; public class LKImageView extends ImageButton { private static ImageLoaderEngine mEngine; private DisplayOptions mDisplayOptions; private static final float Trans = -25f; //按下这个按钮进行的颜色过滤 private final static float[] BT_SELECTED = new float[]{ 1, 0, 0, 0, Trans, 0, 1, 0, 0, Trans, 0, 0, 1, 0, Trans, 0, 0, 0, 1, 0}; //按钮恢复原状的颜色过滤 private final static float[] BT_NOT_SELECTED = new float[]{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0}; private ColorMatrixColorFilter mPressFilter; private ColorMatrixColorFilter mNormalFilter; public LKImageView(Context context, AttributeSet attrs) { super(context, attrs); setBackgroundResource(R.drawable.transparent); } public LKImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setBackgroundResource(R.drawable.transparent); } public void setDisplayOptions(DisplayOptions option) { this.mDisplayOptions = option; } public void display(DisplayOptions options) { this.mDisplayOptions = options; display(); } public void display() { mEngine.display(this, mDisplayOptions); } public void display(BitmapProgressListener listener) { this.mDisplayOptions.setProgressListener(listener); mEngine.display(this, mDisplayOptions); } public void display(OnLoadingListener listener) { this.mDisplayOptions.setOnLoadingListener(listener); mEngine.display(this, mDisplayOptions); } @Override public boolean onTouchEvent(MotionEvent event) { if (mDisplayOptions.isShowPressEffect()) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (getDrawable() != null) { if (mPressFilter == null) { mPressFilter = new ColorMatrixColorFilter(BT_SELECTED); } getDrawable().setColorFilter(mPressFilter); } break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: if (getDrawable() != null) { if (mNormalFilter == null) { mNormalFilter = new ColorMatrixColorFilter(BT_NOT_SELECTED); } getDrawable().setColorFilter(mNormalFilter); } break; default: break; } } return super.onTouchEvent(event); } }